package com.xiaoai.juc;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * 同步队列
 * 和其他BlockingQueue不同，SynchronousQueue
 * put一个元素，必须从里面take取出，否则不能put进去值
 * @Author
 * @Date 2021-09-21 23:51
 */
public class q2_SynchronousQueue {

    public static void main(String[] args){
        BlockingQueue<String> blockingQueue = new SynchronousQueue<>();// 同步队列

        new Thread(() -> {

            try {
                System.out.println(Thread.currentThread().getName() + "put:1");
                blockingQueue.put("1");
                System.out.println(Thread.currentThread().getName() + "put:2");
                blockingQueue.put("2");
                System.out.println(Thread.currentThread().getName() + "put:3");
                blockingQueue.put("3");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        new Thread(() -> {
            try {
//                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
//                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
//                TimeUnit.SECONDS.sleep(3);
                System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();




    }

}
